package com.flh.crm.web.filter;

import com.flh.crm.settings.domain.User;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @Author FLH
 * @Date 2020/7/26 17:09
 * @Version 1.0
 */
public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        System.out.println("进入验证是否登录的过滤器");
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;


        String path = request.getServletPath();

        //放行
        if ("/login.jsp".equals(path)||"/settings/user/login.do".equals(path)){

            chain.doFilter(req,resp);
        }else {
            HttpSession session = request.getSession();
            User user = (User) session.getAttribute("user");

            //判断是否登录
            if (user!=null){
                chain.doFilter(request,response);
            }else {
            /*
             重定向路径的写法
             绝对路径

             转发
                特殊的绝对路径的写法 不加/项目名 也称内部路径
             重定向
                加/项目名 +具体

             为什么使用重定向?
             使用转发会停留到老路径，不是转发后的路径
             重定向则是后来的路径

             */
                // jsp中 ${pageContext.request.contextPath} /项目名
                //动态获取项目名request.getContextPath() == /项目名
                response.sendRedirect(request.getContextPath()+"/login.jsp");
            }


        }





    }
}

















